package educar.controllers;


import javax.swing.JTable;

import educar.gui.IView;
import educar.gui.admin.SearchPertenece;
import educar.idioma.Locale;
import educar.models.Facultad;
import educar.models.Teacher;


/**
 * Permite buscar un docente dentro de una facultad
 * en la tabla pertenece
 */
public class SearchPerteneceController implements IController {
	private SearchPertenece view;
	private JTable table;
	
	/**
	 * Constructor
	 * @param table "JTable sobre la cual se busca"
	 */
	public SearchPerteneceController(JTable table) {
		this.table = table;
	}


	public void process(String model){
		/*guardo el texto a buscar*/
		String docente = view.getDocente();
		String facultad = view.getFacultad();
		/*obtengo la columna sobre la cual se busca*/
		int columna = view.getColumna();
		boolean result = false;
		if (columna == 0) {
			result = busquedaSimple(docente,0);
		}		
		else {
			if (columna == 1) {
				result = busquedaSimple(facultad,1);
			}
			else {
				result = busquedaDoble(docente,facultad);	
			}			
		}
        if (!result) {
        	view.present(Locale.NOT_FOUND);
        }
		
	}
	
	/**
	 * Si solo busco sobre un campo
	 * @param texto a buscar
	 * @return selecciona en la tabla el valor encontrado
	 */
	private boolean busquedaSimple(String texto,Integer column) {
			int inicio = table.getSelectedRow()+1;
	        for(int row = inicio; row < table.getRowCount(); row++) {
	            if (column==0) {
	            	Teacher t = (Teacher)table.getValueAt(row,0);
	            	if(t.comparar(texto)) {
	            		table.setRowSelectionInterval(row,row);
	               	 	return true;
	            	}
	            }
	            if (column==1) {
	            	Facultad m = (Facultad)table.getValueAt(row,1);
	            	if (m.comparar(texto)) {
	            		table.setRowSelectionInterval(row,row);
	               	 	return true;
	            	}
	            }        
	        }
	       	if (table.getSelectedRow()>=0) {
	        	table.removeRowSelectionInterval(table.getSelectedRow(),table.getSelectedRow());
	        }
	        return false;        
		}
	
	/**
	 * si se buscan 2 campos
	 * @param docente a buscar
	 * @param facultad a buscar
	 * @return selecciona en la tabla el valor encontrado
	 */
	private boolean busquedaDoble(String docente,String facultad) {
		int inicio = 0;
        for(int row = inicio; row < table.getRowCount(); row++) {  
        	Teacher t = (Teacher)table.getValueAt(row,0);
        	Facultad f = (Facultad)table.getValueAt(row,1);
        	/*si lo actual es igual a lo buscado*/
            if(t.comparar(docente) && f.comparar(facultad))  
                {
            	 /*selecciono la fila adecuada*/
            	 table.setRowSelectionInterval(row,row);
            	 return true;
                }  
            }
       	if (table.getSelectedRow()>=0) {
        	table.removeRowSelectionInterval(table.getSelectedRow(),table.getSelectedRow());
        }
        return false;
	}
	
	public void setView(IView view) {
		this.view = (SearchPertenece) view;
	}

}
